Proxy servers, or simply “proxies,” are playing an increasingly important role in network traffic load balancing and management. Generically, a proxy is any type of device situated within a network intermediate to a set of end-user clients and one or more origin servers. Some forms of proxy are pass-through devices that provide specific services complimentary to those services provided by the origin servers, such as providing firewall protection or packet validation. Other “active” proxies attempt to speed up and improve end-user response times by replicating origin server functionality, such as through content caching.
The latter form of proxy functions as a surrogate to an origin server. In a Web environment, for example, surrogate proxies can be highly effective in off-loading origin server workloads when used to cache and serve static or relatively unchanging Web content. Each surrogate proxy receives requests from individual clients and directly provides responses using information content staged from the origin server and locally stored. However, these same proxies are relegated to functioning as pass-through devices when used to provide dynamic content. Dynamic content includes personalized Web pages as well as any form of content subject to change on a per-request basis. This type of content can only be provided by the origin servers and cannot be cached in proxies. Accordingly, each surrogate proxy merely forwards individual requests to an origin server and returns any response received back to the requesting client.
Thus, both “active” and “surrogate” proxies generate pass-through requests. A pass-through request is a transaction that is forwarded by a proxy to an origin server. By functioning as pass-through devices, these proxies can add to network overhead through inefficient proxy-origin server connection management, particularly when operating with connection-oriented protocols, such as the Transmission Control Protocol (TCP). Preferably, a relayed proxy forwards requests destined for an origin server over one or more existing connections. However, individual client requests are often queued by the proxy and inefficiently forwarded to the origin server using the next available connection or via a new connection without regard to existing connection status. In the worst case, every request could be sent on a separate connection, thereby incurring resource and processor allocation costs for connection set up and termination, plus actual request transmission overhead. Poor proxy-origin server connection management can lead to poor response times and packet congestion. The proxy thereby becomes a network traffic bottleneck.
In the prior art, systems for improving proxy performance are licensed by Cacheflow (www.cacheflow.com), Sunnyvale, Calif.; Inktomi (www.inktomi.com), Foster City, Calif.; Network Appliance (www.networkappliance.com), Sunnyvale, Calif.; and Squid (www.squid-cache.org). These systems focus primarily on the connections between clients and proxies and generally incorporate some form of caching of frequently accessed data. Thus, these solutions are directed primarily to addressing cache freshness and the retrieval of resources from the cache. While these cache freshening techniques ensure that the data in the cache is current with the origin server data, these systems fail to improve upon or optimize the connection between proxies and origin servers.
Similarly, a system for reusing persistent connections between an origin server and clients is described in A. Feldmann et al., “Performance of Web Proxy Caching in Heterogeneous Bandwidth Environments,” Proc. of the IEEE, INFOCOM '99 Conference (1999), the disclosure of which is incorporated by reference. This system has been shown to improve response times by reducing TCP overhead. A persistent connection to a proxy can be reused for requests from another client through “connection caching.” However, each connection cache requires a persistent connection to a given content provider, regardless of the number of clients connected to the proxy. Consequently, network resources dedicated to support those content providers that are infrequently requested are needlessly wasted.
Likewise, a system for providing persistent connection reuse is provided by the Webscaler product, licensed by NetScaler (www.netscaler.com), Santa Clara, Calif. Client requests are directed, multiplexed, and funneled into high-speed server sessions. However, the persistent connection reuse improves overall response times only in part and fails to select an existing connection or open a new connection based on proxy-origin server connection status.
Therefore, there is a need for an approach to efficiently forwarding requests received from a plurality of clients to a proxied server. Preferably, such an approach would substantially maximize the utilization of existing connections and minimize idle and slow start times.